//package com.sduept.nwld.dataserver.service.equipment.assessment;
//
//import java.io.BufferedInputStream;
//import java.io.BufferedWriter;
//import java.io.File;
//import java.io.FileInputStream;
//import java.io.FileNotFoundException;
//import java.io.FileOutputStream;
//import java.io.IOException;
//import java.io.InputStream;
//import java.io.OutputStream;
//import java.io.OutputStreamWriter;
//import java.io.UnsupportedEncodingException;
//import java.lang.reflect.InvocationTargetException;
//import java.lang.reflect.Method;
//import java.net.URL;
//import java.net.URLEncoder;
//import java.util.Properties;
//
//import javax.faces.context.FacesContext;
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//
//import org.apache.poi.hwpf.HWPFDocument;
//import org.apache.poi.hwpf.model.PicturesTable;
//import org.apache.poi.hwpf.usermodel.CharacterRun;
//import org.apache.poi.hwpf.usermodel.Paragraph;
//import org.apache.poi.hwpf.usermodel.Picture;
//import org.apache.poi.hwpf.usermodel.Range;
//import org.apache.poi.hwpf.usermodel.Table;
//import org.apache.poi.hwpf.usermodel.TableCell;
//import org.apache.poi.hwpf.usermodel.TableIterator;
//import org.apache.poi.hwpf.usermodel.TableRow;
//import org.primefaces.model.DefaultStreamedContent;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//
//import com.sduept.bigdata.document.core.CommonDocumentProperties;
//import com.sduept.bigdata.document.entity.core.CommonDocument;
//
//
///**
// * 文档内容查看
// * @author huangyu
// * @Date 2019年9月9日
// */
//@Service
//public class DocumentContentShowService {
//	
//	@Autowired
//	private CommonDocumentProperties props;
//	
//	private int beginArray[];
//	private int endArray[];
//	private String htmlTextArray[];
//	private String htmlText = "";
//	private boolean tblExist = false;
//	/**
//	 * 文档中的图片存放位置
//	 */
//	private String documentPicturePath = "D:\\documentPictures";
//	/**
//	 * 包含文档内容的html文件的位置
//	 */
//	private String documentHTMLPath= "D:\\abc.html";
//	
//	/**
//	 * 获取文档的内容
//	 * @param doc
//	 * @throws FileNotFoundException 
//	 */
//	public void getDocumentContent(CommonDocument doc) throws FileNotFoundException {
//		// 先将文档下载到本地
//		fileDownload(doc);
//		// 获取文档的内容
//		getWordAndStyle(doc);
//		// 打开本地的html
//		openUrlInBrowse();
//	}
//	
//	/**
//	 * 下载文档
//	 * @param doc
//	 * @throws FileNotFoundException 
//	 */
//	private void fileDownload(CommonDocument doc) throws FileNotFoundException {
//		InputStream stream = null;
//		// 获取文档的绝对路径
//		String filePath = props.documentPath+ doc.getPath();
//		stream = new FileInputStream(filePath);
//		HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
//		try {
//			String agent = request.getHeader("User-Agent").toLowerCase();
//			if (agent != null && (agent.indexOf("msie") != -1 || (agent.indexOf("rv") != -1 && agent.indexOf("firefox") == -1))
//					|| agent.indexOf("edge") != -1) {
//				new DefaultStreamedContent(stream, "application/octet-stream", URLEncoder.encode(doc.getDescription(), "UTF-8"));
//			} else {
//				new DefaultStreamedContent(stream, "application/octet-stream", new String(doc.getDescription().getBytes("UTF-8"), "ISO8859-1"));
//			}
//		} catch (UnsupportedEncodingException e) {
//			e.printStackTrace();
//		}
//	}
//	
//	/**
//	 * 获取文档内容
//	 * @param document
//	 */
//	private void getWordAndStyle(CommonDocument document) {
//		// 文档的本地路径
//		String filePath = props.getDocumentPath() + document.getPath();
//		/**
//		 * 回车符ASCII码
//		 */
//		short ENTER_ASCII = 13;
//
//		/**
//		 * 空格符ASCII码
//		 */
//		short SPACE_ASCII = 32;
//
//		/**
//		 * 水平制表符ASCII码
//		 */
//		short TABULATION_ASCII = 9;
//		tblExist = false;
//		try {
//			FileInputStream in = new FileInputStream(filePath);
//			try {
//				HWPFDocument doc = new HWPFDocument(in);
//				int num = 100;
//				beginArray = new int[num];
//				endArray = new int[num];
//				htmlTextArray = new String[num];
//				// 创建图片容器
//				PicturesTable pTable = doc.getPicturesTable();
//				htmlText = "<html><head><title>文档内容查看</title></head><body style=width:80%;margin-left:200px><h1 style=text-align:center>"+document.getName()+"</h1>";
//				//得到文档的读取范围
//				Range rangetbl = doc.getRange();
//				TableIterator it = new TableIterator(rangetbl);
//				// 创建临时字符串,好加以判断一串字符是否存在相同格式
//				if(it.hasNext()) {
//					readTable(it,rangetbl);
//				}
//				int cur = 0;
//				String tempString = "";
//				// 取得文档中字符的总数
//				int length = doc.characterLength();
//				for (int i = 0; i < length - 1; i++) {
//					// 整篇文章的字符通过一个个字符的来判断,range为得到文档的范围
//					Range range = new Range(i, i + 1, doc);
//					CharacterRun cr = range.getCharacterRun(0);
//					if(tblExist) {
//						if(i == beginArray[cur]) {
//							htmlText += tempString + htmlTextArray[cur];
//							tempString="";
//							i=endArray[cur]-1;
//							cur++;
//							continue;
//						}
//					}
//					if (pTable.hasPicture(cr)) {
//						htmlText +=  tempString;
//						// 读写图片
//						readPicture(pTable, cr);
//						tempString = "";
//					} else {
//						Range range2 = new Range(i + 1, i + 2, doc);
//						// 第二个字符
//						CharacterRun cr2 = range2.getCharacterRun(0);
//						char c = cr.text().charAt(0);
//						if (c == ENTER_ASCII) {
//							// 判断是否为回车符
//							tempString += "<br/>";
//						} else if (c == SPACE_ASCII) {
//							// 判断是否为空格符
//							tempString += " ";
//						} else if (c == TABULATION_ASCII) {
//							// 判断是否为水平制表符
//							tempString += "    ";
//						}
//						// 比较前后2个字符是否具有相同的格式
//						boolean flag = compareCharStyle(cr, cr2);
//						if (flag) {
//							tempString += cr.text();
//						} else {
//							String fontStyle = "<span style=font-family:" + cr.getFontName() + ";font-size:" + cr.getFontSize() + "pt;";
//							if (cr.isBold()) {
//								fontStyle += "font-weight:bold;";
//							}
//							if (cr.isItalic()) {
//								fontStyle += "font-style:italic;";
//							}
//							htmlText += fontStyle + ">" + tempString + cr.text() + "</span>";
//							tempString = "";
//						}
//					}
//				}
//				htmlText += tempString + "</body></html>";
//				writeFile(htmlText);
//			} catch (IOException e) {
//				e.printStackTrace();
//			}
//		} catch (FileNotFoundException e) {
//			return;
//		}
//	}
//	
//	/**
//	 * 读写文档中的表格
//	 * @param it
//	 * @param rangetbl
//	 */
//	private void readTable(TableIterator it, Range rangetbl) {
//		String htmlTextTbl = "";
//		int beginPosi = 0;
//		int endPosi = 0;
//		//迭代文档中的表格  
//		int counter = -1;
//		while (it.hasNext()) { 
//			tblExist = true;
//			htmlTextTbl = "";
//			Table tb = (Table) it.next();
//			beginPosi = tb.getStartOffset();
//			endPosi = tb.getEndOffset();
//			counter += 1;
//			// 迭代行，默认从0开始
//			beginArray[counter] = beginPosi;
//			endArray[counter] = endPosi;
//			htmlTextTbl += "<table border>";
//			for (int i = 0; i < tb.numRows(); i++) {
//				TableRow tr = tb.getRow(i);
//				htmlTextTbl += "<tr>";
//				// 迭代列，默认从0开始 
//				for (int j = 0; j < tr.numCells(); j++) {
//					// 取得单元格
//					TableCell td = tr.getCell(j);
//					int cellWidth = td.getWidth();
//					//取得单元格的内容
//					for(int k=0;k<td.numParagraphs();k++){
//						Paragraph para = td.getParagraph(k);
//						String s = para.text().toString().trim();
//						if(s=="") {
//							s=" ";
//						}
//						htmlTextTbl += "<td width="+cellWidth+ ">"+s+"</td>";
//					}
//				}
//			}
//			htmlTextTbl += "</table>" ;    
//	   		htmlTextArray[counter] = htmlTextTbl;
//		}
//	}
//	
//	/**
//	 * 读写文档中的图片
//	 * @param pTable
//	 * @param cr
//	 */
//	private void readPicture(PicturesTable pTable, CharacterRun cr) {
//		// 提取图片
//		Picture pic = pTable.extractPicture(cr, false);
//		// 返回POI建议的图片文件名
//		String afileName = pic.suggestFullFileName();
//		// 创建文件夹（将文档里面的图片存在该文件夹下）
//		File file = new File(documentPicturePath);
//		if(!file.exists()){//如果文件夹不存在
//			file.mkdir();//创建文件夹
//		}
//		try {
//			OutputStream out = new FileOutputStream(new File(documentPicturePath + File.separator + afileName));
//			try {
//				pic.writeImageContent(out);
//				htmlText += "<img src=" + documentPicturePath + "\\" + afileName + " />";
//			} catch (IOException e) {
//				e.printStackTrace();
//			}
//		} catch (FileNotFoundException e) {
//			e.printStackTrace();
//		}
//	}
//	/**
//	 * 比较2个字符是否具有相同的格式
//	 * @param cr1
//	 * @param cr2
//	 * @return
//	 */
//	private boolean compareCharStyle(CharacterRun cr1, CharacterRun cr2) {
//		boolean flag = false;
//		if (cr1.isBold() == cr2.isBold() && cr1.isItalic() == cr2.isItalic() && cr1.getFontName().equals(cr2.getFontName()) && cr1.getFontSize() == cr2.getFontSize()) {
//			flag = true;
//		}
//		return flag;
//	}
//	/**
//	 * 将指定的String写入文件
//	 * @param str
//	 */
//	private void writeFile(String str) {
//		FileOutputStream fos = null;
//		BufferedWriter bw = null;
//		try {
//			File file = new File(documentHTMLPath);
//			fos = new FileOutputStream(file);
//			bw = new BufferedWriter(new OutputStreamWriter(fos));
//			bw.write(str);
//		} catch (FileNotFoundException fnfe) {
//			return;
//		} catch (IOException ioe) {
//			ioe.printStackTrace();
//		} finally {
//			try {
//				if (bw != null)
//					bw.close();
//				if (fos != null)
//					fos.close();
//			} catch (IOException ie) {
//				return;
//			}
//		}
//	}
//	
//	private String openLocalHTMLFile() {
//		String url = null;
//		//打开文件：
//		// 第一种: Object获取项目中的properties
////		InputStream in = Object. class .getResourceAsStream( "/com/demo/conf.properties" );
//		// 第二种: 直接获得本地配置文件properties
//		try {
//			FileInputStream in = new FileInputStream("D:\\work\\demo\\conf.properties");
//			try {
//				//加载properties文件
//				Properties prop =  new  Properties();
//				prop.load(in);
//				//从配置文件中获取 页面的位置,此处url为网页的绝对路径并解决乱码，如：d:/demo/index.html
//				String t = prop.getProperty(documentHTMLPath);
//				String s = t.trim();
//				byte[] x = s.getBytes("ISO-8859-1");
//				url = new String(x,"gbk");
//			} catch (IOException e) {
//				e.printStackTrace();
//			}
//		} catch (FileNotFoundException e) {
//			e.printStackTrace();
//		} 
//		return url;
//	}
//	
//	
//	/**
//	 * 根据url打开网页
//	 */
//	private void openUrlInBrowse() {
////		String url = openLocalHTMLFile();
//		String url = documentHTMLPath;
//		String osName = System.getProperty("os.name", "");
//		if (osName.startsWith("Windows")) {
//			try {
//				Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + url);
//			} catch (IOException e) {
//				e.printStackTrace();
//			}
//		} else if (osName.startsWith("Mac OS")) {
//			try {
//				Class fileMgr = Class.forName("com.apple.eio.FileManager");
//				try {
//					Method openURL = fileMgr.getDeclaredMethod("openURL", new Class[] { String.class });
//					try {
//						openURL.invoke(null, new Object[] { url });
//					} catch (IllegalAccessException e) {
//						e.printStackTrace();
//					} catch (IllegalArgumentException e) {
//						e.printStackTrace();
//					} catch (InvocationTargetException e) {
//						e.printStackTrace();
//					}
//				} catch (NoSuchMethodException e) {
//					e.printStackTrace();
//				} catch (SecurityException e) {
//					e.printStackTrace();
//				}
//			} catch (ClassNotFoundException e) {
//				e.printStackTrace();
//			}
//		} else { //  Unix or Linux
//			String[] browsers = { "firefox", "opera", "konqueror", "epiphany", "mozilla", "netscape" };
//			String browser = null;
//			for (int count = 0; count < browsers.length && browser == null; count++) {
//				try {
//					int ss = Runtime.getRuntime().exec(new String[] { "which", browsers[count] }).waitFor();
//					if (ss == 0) {
//						browser = browsers[count];
//					}
//				} catch (InterruptedException e) {
//					e.printStackTrace();
//				} catch (IOException e) {
//					e.printStackTrace();
//				}
//			}
//			if (browser == null) {
//				return;
//			} else {
//				try {
//					Runtime.getRuntime().exec(new String[] { browser, url });
//				} catch (IOException e) {
//					e.printStackTrace();
//				}
//			}
//		}
//	}
//	
//	private void downLoad(String filePath, boolean isOnLine) throws Exception {
//		HttpServletResponse response= (HttpServletResponse)FacesContext.getCurrentInstance().getExternalContext().getResponse();
//        File f = new File(filePath);
//        if (!f.exists()) {
//            response.sendError(404, "File not found!");
//            return;
//        }
//        BufferedInputStream br = new BufferedInputStream(new FileInputStream(f));
//        byte[] buf = new byte[1024];
//        int len = 0;
//
//        response.reset(); // 非常重要
//        if (isOnLine) { // 在线打开方式
//            URL u = new URL("file:///" + filePath);
//            response.setContentType(u.openConnection().getContentType());
//            response.setHeader("Content-Disposition", "inline; filename=" + f.getName());
//            // 文件名应该编码成UTF-8
//        } else { // 纯下载方式
//            response.setContentType("application/x-msdownload");
//            response.setHeader("Content-Disposition", "attachment; filename=" + f.getName());
//        }
//        OutputStream out = response.getOutputStream();
//        while ((len = br.read(buf)) > 0)
//            out.write(buf, 0, len);
//        br.close();
//        out.close();
//    }
//	
//	
//}
